#ifndef __LIST_H__
#define __LIST_H__

// 数据节点
struct node_st {
	void *data;
	struct node_st *next;
};

// 头节点
typedef struct listhead_st {
	// struct node_st *next;
	// &node就是头节点的地址
	struct node_st node; // node->next还是指向第一个数据节点
	int size;
}list_t;

typedef int (*cmp_t)(const void *data, const void *key);
typedef void (*pri_t)(const void *data);

int listhead_init(list_t **mylist, int size);

int list_insert(list_t *mylist, const void *data);

int list_insert_tail(list_t *mylist, const void *data);

int list_empty(const list_t *mylist);

void *list_find(const list_t *mylist, const void *key, cmp_t cmp);

int list_delete(list_t *mylist, const void *key, cmp_t cmp);

void list_traval(const list_t *mylist, pri_t pri);

void list_destroy(list_t **mylist);

#endif

